Débat d'idées 
Quel langage privilégier pour mes programmes réaliser ?
 
 

 
    Aujourd'hui, pas de débats sanglants avec crachats et noms d'oiseaux à tout va qui finissent en empoignades viriles. Hé ben oui, il faut savoir être sérieux de temps en temps. D'autant plus que ce présent article risque fort de conditionner à jamais votre avenir de programmeur (si, si !!!). Mais comme le dit si bien mon élève Sherlock Holmes, seul rosbif que je puisse saquer, mettons nous à la recherches d'indice afin d'élucider cette turlupinente question.
 
 

 
1. Compilateurs et langages de programmation

2. Quelques langages de programmation généralistes
        2.1. L'assembleur
        2.2. Le B.A.S.I.C.
        2.3. Le C
                2.3.1. Le cas C++
        2.4. Le Pascal
        2.5. Conclusion

3. Les cas Visual Xxx
 
 
 

 
 
 
 
1. Compilateurs et langages de programmation
    Dans le monde informatique, on peut subdiviser la manière dont le système d'exploitation (O.S.) traite les données qui parcourant sont cerveau en deux catégories :

    Le document que vous avez sous les yeux (le fichier LANGAGE.HTM) fait partie de la seconde catégorie, il ne peut inter-agir sur la machine. Afin de le lire, on doit obligatoirement utiliser un visualiseur de fichier HTML (le programme NETSCAPE.EXE, par exemple). En quelque sorte, il n'a lieu d'exister que s'il est couplé avec un fichier exécutable.

    Comme vous le savez sans doute, toutes les informations parcourant les circuits de l'ordinateur sont au format binaire, c'est-à-dire qu'elles sont uniquement composées de 0 et de 1, seule langue comprise par le microprocesseur (cerveau de l'ordinateur). Ce qui les rend pratiquement illisibles par le cerveau humain

    C'est dans ce souci de lisibilité qu'ont été mis au point les compilateurs. Ils permettent d'après un fichier source (dit aussi listing), compréhensible par l'homme (ou la femme), de produire un fichier composé uniquement de 0 et de 1 compréhensible par la machine (l'opération inverse, qui vise à transformer un fichier binaire en fichier exploitable par l'homme, est effectuée par un debugger ). Ainsi la suite binaire "1000101111000010" signifie en assembleur "mov ax, dx" soit "transfert d'un endroit de la mémoire (registre DX) dans un autre endroit de la mémoire (registre AX)". Avouez qu'il n'est pas simple de gérer de telles suites binaires. Le compilateur se charge de faire la traduction entre l'utilisateur et la machine afin de produire un fichier exécutable en binaire.

     Chaque langage propose à ses utilisateurs la possibilité de commander directement l'ordinateur par des instructions spécifiques, des mots clés. L'ensemble de ces instructions soigneusement rédigées l'une après l'autre forment le fichier source, le listing. Le compilateur se chargera de traduire tout cela en langage machine (seule langue comprise par le cerveau de votre ordinateur chéri : le microprocesseur) afin de produire un fichier exécutable.

    Mais alors, me direz-vous, pourquoi existe-t-il tant de langages de programmation alors qu'ils font tous la même chose ? En effet, il doit bien exister plusieurs dizaines de langages. Cette profusion n'a lieu d'exister que pour offrir un vaste choix auprès des utilisateurs (j'y décèlerais aussi une opportunité commerciale). On a ainsi des langages de programmation spécialement dédiés aux mathématiques (mise en oeuvre facilité du calcul d'une équation à n degrés, calculs d'intégrales...), à la 3D, à la gestion des sons, à la gestion des fichiers...

    Beaucoup de ces langages sont ciblés. Mais la contrepartie à cette spécialisation est une moins bonne offre ou à une offre nulle dans un autre secteur. Ainsi ne vous attendez pas à programmer facilement du son sur le langage qui est spécialement dédié à la gestion de la 3D. L'utilisation de ce type de langage peut se révéler handicapente pour le futur. Si l'on veut passer à d'autres aspects de la machine, nous serions confrontés à une barrière que peu ont le courage d'affronter : l'obligation de réapprendre un autre langage. Nous mettrons ces types de langages en sourdines car trop pointus dans un seul domaine et négligeant trop allègrement les autres aspects de la machine.

    Ils nous restent les autres : les généralistes. Ils sont bien plus intéressants. Parole de Messire Hobocn. Ils offrent un large éventail de possibilités et de par ce fait nous permettrons de programmer, par nous même par la suite, les spécificités dédiées à un langage spécialisé. Il suffit alors d'un peu d'imagination pour arriver à nos fins. Car après tout, un langage généraliste connu dans ses moindres recoins permet de tout faire, je dis bien tout.
 

 

 
 

 
2. Quelques langages de programmation généralistes
    Comme je viens de le dire, il existe des tas de langages généralistes. Mais là aussi, on peut se poser la question : pourquoi tant de langages généralistes si tous offrent des possibilités dans la gestion des fichiers, de l'écran, du son...? La réponse est bien simple. Chacun a une manière bien spéciale de vous permettre de gérer l'ordinateur. Nous verrons que le Basic est de loin le plus facile à comprendre, à mettre en oeuvre, dans un premier temps, mais que cela se paye par un énorme compromis : les garde-fous mis en place par le langage pour ne pas risquer de planter la machine. Par exemple, dès que l'on voudra gérer soi-même l'écran, on se heurtera à la philosophie de ce dernier : une action = une possibilité, alors que dans les autres langages (en C et en Assembleur notamment) : une action = une infinité de possibilités.
 

 
 
2.1. L'assembleur
    Certainement l'un des langages les plus mystérieux. Beaucoup en parlent mais ne savent pas exactement de quoi il en retourne.

    Appelé, accessoirement, langage machine, il est le plus puissant de tous, et de très très loin. C'est le langage le plus proche de la machine, c'est en quelque sorte sa langue maternelle. Avec lui on doit obligatoirement raisonner comme le microprocesseur. Ici, on ne manie pas des variables (sauf dans certains cas bien précis) mais les registres propres du microprocesseur (AX, BX, CX, DX...). Pas question de taper "PLAY DO#", comme on le ferait si aisément avec un simple Basic pour jouer la note do en dièse mais il faut directement programmer le circuit électronique de l'ordinateur spécialement dédié à cette tâche. Alors qu'avec le Basic ou le C on utilise des variables très facilement, ici on doit directement faire les transferts d'un emplacement mémoire physique à un autre et cela manuellement, etc...Tout est à la charge du programmeur. Ainsi on colle au plus près de la machine.

    Contrairement à d'autres langages, ses instructions ont été fixées une bonne fois pour toutes et l'on ne peut en rajouter. L'apparition de nouvelles instructions se fait avec la sortie d'un nouveau microprocesseur. Mais cela est largement suffisant car toute manipulation sur un ordinateur n'est, à la base, qu'une suite de copies de données, de tests de comparaison et de sauts à une adresse.

    Prenons un exemple simple: en Basic, lorsque l'on donne une valeur à une variable on écrit "age=12", et lorsque que l'on veut afficher un point à l'écran, on écrit "PixelPut X,Y,Couleur". Ces deux actions, qui semblent totalement différentes, ne sont en fait que des copies. En effet, dans le premier cas, on copie la valeur "12" dans l'emplacement mémoire réservé à "age" alors que dans le deuxième, on copie à l'emplacement mémoire vidéo "X,Y" la valeur du pixel de couleur "Couleur".

    Alors que le Basic vous propose deux possibilités de copie (l'une dans une variable, l'autre sur l'écran), l'assembleur n'utilise qu'une seule possibilité qui somme toute peut effectuer les deux opérations précédentes. Lorsque le compilateur Basic ou C aura produit un fichier exécutable, les cheminements, les raisonnements seront les mêmes que ceux écrits en Assembleur.

    Mais alors pourquoi programmer en Assembleur et se casser la tête avec une logique difficile à appréhender ?
    Là aussi la réponse est assez simple. Reprenons nos précédents exemples. Dans le premier cas "age=12", après que le compilateur Basic ait produit un fichier exécutable, celui-ci sera en langage machine (je vous rappelle qu'un compilateur transforme un fichier source en fichier binaire, seul langage compris par le microprocesseur), on aura donc (mov signifie copie le contenu de ... dans ...) :

    Dans cet exemple, le compilateur se sert du registre AX comme intermédiaire. Pourquoi me diriez-vous ? Ne pourrait-il pas procéder comme suit :
      Certes, il le pourrait mais il faut savoir que les registres du microprocesseur sont limités. En langage évolué, nous disposons d'autant de variables que l'on souhaite. En assembleur c'est une autre chose. Ces derniers ne sont qu'au nombre de 4 et on doit tout faire rien qu'avec ces 4 là. La spécificité de certaines instructions en assembleur exige que l'on utilise exclusivement des registres et non des variables. Ainsi lorsqu'on copie une valeur dans un emplacement mémoire ou un port spécifique, on doit obligatoirement passer par ces registres. Donc on doit sans cesse sauver des valeurs se trouvant dans l'un des registres pour pouvoir les utiliser par la suite.

    Les langages évolués offrent beaucoup de possibilités mais doivent impérativement se soumettre à cette limite car, après tout, une fois l'exécutable produit, il sera en langage binaire. Donc pour ne pas produire un exécutable bancal, les surcharges d'affectation sont omniprésentes. Dans le cas précédent, c'est le seul cas de figure où nous pouvons donner une valeur directe à une variable en assembleur. Si l'on programme en Assembleur, nous pouvons nous permettre d'écrire simplement "mov age, 12", mais le Basic ne le fera pas, il se servira du registre AX comme intermédiaire. C'est sa nature. Dans les autres cas, nous serons dans l'obligation de passer par l'intermédiaire d'un registre.

    Lorsque nous programmons directement en Assembleur, c'est nous qui devons nous dépêtrer avec cette limitation et nous pouvons faire toutes les manipulations que nous voulons. Les risques de plantages sont alors plus nombreux qu'avec un langage évolué qui, lui, ne prend aucun risque.

   Revenons à nos moutons. Donc une économie d'une instruction en assembleur. Je sais, vous allez me dire : "Ouais, mais moi j'ai un Pentium II à 333Mhz et ces deux instructions seront exécutées en 1/10n de secondes". Oui, c'est vrai pour ce cas de figure mais mettez vous dans le crâne que ce type d'opération est toujours appliqué lorsqu'il faut manier des copies de valeurs et comme le microprocesseur ne sait faire que ça, la surcharge est présente des milliers de fois dans un fichier exécutable écrit en Basic (et en C dans une moindre mesure). Mais voyons le second cas de figure.

    Dans "PixelPut X, Y, Couleur", que va faire le Basic ? Il va tester si l'écran est en mode graphique par l'intermédiaire du BIOS (le circuit électronique le plus lent du PC), il va calculer les positions x, y (y*longueur_de_l'écran + x), puis copier la valeur du pixel à cette coordonnée. Si l'on veut afficher un autre pixel à l'écran, rebelote : test, calcul, copie. Si l'on veut afficher tous les pixels de l'écran, on se retrouve à faire au minimum 64000 fois la même procédure. C'est très très lourd mais surtout pesant pour le microprocesseur qui n'a pas que vous à s'occuper. Dans le cas de l'Assembleur, vous pouvez choisir de tester si l'écran est en mode graphique ou non et sans passer par le BIOS, les calculs peuvent être optimisés par diverses magouilles (technique de rotation binaire inconnu ou non acceptée par le Basic) et enfin la copie du pixel sera très rapide (comme dans l'exemple 1). Percevez-vous maintenant les avantages de l'Assembleur par rapport au Basic ? Je vous garantis que les temps d'exécution d'un programme écrit en Assembleur seront toujours, au minimum, plus de 500 fois plus rapides qu'un programme écrit en Basic.

    Pour comprendre ce concept crucial de rapidité d'exécution, nous devons raisonner en terme de cycle d'horloge du microprocesseur de la machine. En effet, un programme exécutable, qu'il soit écrit en Basic ou en Assembleur, s'exécutera toujours à la même vitesse. Ce qui fait la différence entre ces deux langages est uniquement la surcharge d'affectation et les tests que le Basic fait dans votre dos. C'est dans un souci de ne pas planter la machine que le Basic teste si l'écran est en mode graphique. Mais il ne faut pas croire que le Basic va s'accaparer que quelques cycles d'horloge pour effectuer cette tâche, mais des milliers alors que le programmeur en assembleur, s'il sait raisonner comme la machine, peut économiser une très grande partie de ces cycles. C'est là l'avantage déterminant. La contrepartie, si le listing est mal écrit, est le rebootage de la machine (ça m'est arrivé des tas de fois).

    Autre avantage de l'Assembleur : la taille du programme exécutable produit. Du fait qu'il y a très peu de tests (c'est à vous de les fixer) et pas de surcharge d'affectation, la taille est imbattable. Considérez qu'elle sera toujours au moins 10 fois plus petite que celle d'un Basic.

    Etant aussi près de la langue du microprocesseur, l'Assembleur a le privilège de pouvoir bidouiller tous les aspects du PC (gérer le disque dur à votre convenance, faire tourner les lecteurs de disquettes deux fois plus rapidement, agir directement sur les fréquences d'horloge du microprocesseur, écrire votre propre DOS, et même pirater des jeux...).

    La contrepartie à cette extrême vitesse et cette toute petite taille est la lenteur de mise en oeuvre d'un programme en Assembleur. La logique, la rigueur doivent toujours être au rendez-vous sous peine de plantage. Une connaissance très approfondie de la structure de la mémoire et des mécanismes de logique sont indispensables.

    De plus, toutes les fonctions offertes par les langages dits évolués sont absentes. Pour lire un fichier, l'assembleur ne peut compter sur la fonction "0x.." , on doit obligatoirement passer par les interruptions du BIOS ou du DOS qui sont bien moins conviviales à mettre en oeuvre.

    Vous pouvez compter au moins 10 fois plus de temps de développement en assembleur qu'avec d'autres langages évolués. C'est pour cela qu'écrire un programme 100% en Assembleur est une folie (sauf pour les cadors). Il faut mieux écrire les parties critiques du programme (affichages, tri, copie de blocs de mémoire...) en Assembleur et le reste en langage évolué (Basic – C – Pascal...).
 
 
Avantages
  • Vitesse d'exécution la plus rapide du monde et de la terre.
  • Taille de l'exécutable le plus petit du marché.
  • Magouiller tous les aspects du PC.
Inconvénients
  • Première approche difficile. 
  • Lenteur de la mise au point du programme. 
  • La non probabilité d'une machine à une autre. 
  • Il n'existe pas d'éditeur, on doit passer par un éditeur puis faire la compilation à l'invite de DOS.
Quelques Assembleurs
  • TASM : l'assembleur livré avec les produits Borland tels que le C/C++ et le Turbo Pascal. Il peut être utilisé d'une manière autonomes sans ces précédents langages. Le meilleur. 
  • MASM : l'assembleur de Micro$oft. J'ai ouïe dire qu'il n'était plus disponible à la vente (Trop nul ???). De toute façon, les développeurs de chez Micro$oft utilisaient TASM. (NDLR : il ne va pas nous manquer, pour une fois que Micro$oft se viande). 
  • A86 : un assembleur shareware qui ne compile malheureusement que du 8086 et ne tient pas compte des évolutions des microprocesseurs 286, 386, 486, Pentium. Il a l'avantage d'être très peu cher mais n'offre pas toutes les possibilités de l'excellent TASM (segmentation...).
 
 

 
2.2. Le B.A.S.I.C.
    Ha, le BASIC ! Bien souvent, c'est sur ce langage que l'on fait ses premières dents (c'est mon cas). Et cela n'est pas étonnant. Assemblage des initiales Beginner's All Purpose Symbolic Instruction, il est spécialement recommandé à la bleusaille.

    L'avantage de ce langage est la sécurité et la simplicité.

    Il n'y a pratiquement aucun risque de planter la machine en écrivant son programme. Il est conçu de telle sorte que toutes les choses que vous lui faites faire sont, avant d'être exécutées, testées de fond en comble. Pourquoi ? Je viens de vous le dire : IL EST DESTINE A LA BLEUSAILLE !!!!!!. Ici ne craignez pas de faire rebooter le PC si vous écrivez quelque part dans un bloc de mémoire (contrairement à l'Assembleur et au C) ou il faut vraiment le vouloir. Le BASIC ne le fera pas ou vous en empêchera en refusant d'exécuter le programme.

    Donc la première chose qui qualifie le BASIC est la sécurité de la rédaction du listing. Seulement, en contrepartie, cela se paie très cher : la lenteur de la vitesse d'exécution, c'est long de tester le programme de fond en comble. Le Basic est une sorte de grosse machine bureaucratique qui veut absolument s'assurer que vous ne sortez pas du cadre qu'il a lui-même défini (y aurait-il une influence de la doctrine soviétique ????). On peut même dire sans se tromper qu'il détient la palme de la lourdeur (un peu comme Window$).

    La simplicité est son second avantage. Ici, pas besoin de calculer les coordonnées d'un pixel, pas besoin de savoir où sont situées les adresses mémoires pour interroger l'horloge, le calendrier, les disquettes et disques durs, pas besoin de se soucier du mode d'écriture ou de lecture d'un fichier, de la non fermeture d'un fichier, dans quel sens penche le joystick, à quelle position est la souris, si elle est branchée, il se charge de tout, même de ce que vous lui demandez pas ! Sa simplicité est due aussi à son très large éventail de fonctions fournies. Presque tous les aspects du PC sont gérés mais comme je le disais plus haut, cette simplicité et cette profusion de possibilités se paient par les gardes-fous qu'ils imposent à l'utilisateur.

    Par exemple, le BASIC vous permet de jouer des notes de musique mais uniquement sur le PC-SPEAKER (enceinte dans la boite du PC), mais il est pratiquement impossible de jouer un fichier musical *.MOD ou une plage d'un CD-Audio via une carte SoundBlaster sans avoir recours à notre bon vieux Assembleur (tiens, le revoilà lui). En conclusion sur cette partie sur la simplicité, nous pouvons dire que le BASIC offre de grandes possibilités mais que tout ce qui ne fait pas partie de ses compétences originelles sont très sévèrement prohibées. Il n'accepte pas que l'on sorte du cadre que lui-même a fixé. C'est un code de loi à lui tout seul.

    Autre lourdeur étrange : l'interpréteur. Nous avons parlé plus haut de ce qu'était un compilateur (transforme un fichier source en fichier binaire pour que le microprocesseur puisse le comprendre), mais le BASIC ne dispose pas d'un compilateur d'origine (livré séparément, il faut l'acheter, hé oui !) mais d'un interpréteur. Toujours par souci de sécurité, ce dernier est logé obligatoirement en mémoire et permet de faire fonctionner votre programme. L'avantage est de pouvoir exécuter le programme et de le stopper quand bon vous semble. Cette initiative somme toute louable ajoute à la lourdeur. Car l'interpréteur, au lieu de produire en une seule fois un fichier exécutable, va lire la première ligne de votre listing, la traduire en langage machine en mémoire puis l'exécuter, et ainsi de suite pour chacune des lignes. Si vous me permettez cette comparaison, c'est comme si un facteur prenait une lettre, la porte à l'adresse indiquée, puis revient à la poste pour faire la même chose avec la prochaine lettre. Signalons que seulement certains BASIC ont opté pour ce système, les derniers modèles (Visual Basic...) ne souffrent pas de cette connerie. Mais ne comptez pas rivaliser avec l'Assembleur ou le C une fois que vous aurez compilé votre programme.

    Signalons que la portabilité d'un programme BASIC du PC vers un autre ordinateur est faible, mais bien souvent la syntaxe des instructions et des mots clés se rapprochent l'une de l'autre, ce qui rend le décodage simple avec un vulgaire bouquin.

    Il n'en reste pas moins que pour débuter dans la programmation, le BASIC reste une référence afin d'appréhender, sans souci de plantage, les logiques, les notions de variables, de boucles, de sauts, de testes de conditions, de fonctions, de gestion des fichiers...Lorsque l'on est familier de ces choses-là, on peut passer en douceur et à coup sûr au C ou au Pascal.
 
 
Avantages
  • Simplicité d'utilisation. 
  • Sécurité de la rédaction du listing. 
  • Apprentissage rapide de la philosophie de la programmation. 
  • Rapidité de la rédaction du programme.
Inconvénients
  • Extrême lenteur. 
  • Grand taille du fichier exécutable. 
  • Portabilité très relative.
Quelques Basic
  • QUICK BASIC : livré gratuitement avec le DOS 6.22, il a disparu lors de la sortie de Window$ 95 mais peut être récupéré indépendamment du DOS sur les disquettes d'installation. 
  • VISUAL BASIC : il fait partie de la dernière génération des BASIC, mais nous y reviendrons plus bas. 
  • GW-BASIC : ????
 
 

 
2.3. Le C / C++
    C'est le langage de cette fin de siècle. Tout ce passe en 1970. Un mec, un génie plutôt, nommé Dennis Ritchie est en train d'élaborer le noyau du système d'exploitation d'UNIX. Il faut savoir qu'à l'époque, ce type de programmation primordiale devait s'effectuer exclusivement en Assembleur. Comme je vous l'ai dit plus haut, l'Assembleur c'est bien mais lorsque l'on dépasse plusieurs centaines de lignes cela devient très lourd et les erreurs sont difficilement localisables. Ce génie, donc, a la lumineuse idée d'écrire un nouveau langage. Jusque-là, rien de bien original. Il existait en effet des tas de langages et on ne lui promettait pas un énorme retentissement. Mais il allait bien vite révolutionner le petit monde de la programmation. Le C répond à l'attente des développeurs de l'époque :
 

    Le pari est réussi. Pour preuve, la très grande majorité des grands logiciels sont écrits en C, le système d'exploitation de l'Amiga (le plus merveilleux ordinateur jamais créé) est en C, presque tous les jeux (Doom et Quake pour ne citer qu'eux) sont développés en C, etc...

    Autre point fort et signe de pérennité pour l'avenir du C : l'existence d'un comité de normalisation qui entérine les diverses propositions de programmeurs afin d'améliorer le langage pour ses versions futures.

    Ajoutons une dernière chose. Sachez que lorsque sort un nouveau système d'exploitation, une nouvelle machine, le premier langage de haut niveau disponible est un C et non un Pascal ou un Cobol (pouaaaa !!!).

    Vous devez sans doute penser que la première approche avec un tel langage doit être un chemin de croix. Et ben pas du tout. Avec un bon bouquin, cela passe comme dans du beurre.
 
 
 
 
2.3.1. Le cas C++
    Le langage C++ a été conçu par Bjarne Stroustrup (1982) dans le but de doter le langage C standard des possibilités de la Programmation Orientée Objet. Ce n'est certainement pas la confrontation entre deux philosophies mais plutôt une greffe du concept Programmation Orientée Objet arrangé, trafiqué au profit du C classique.

    La POO est une nouvelle forme de programmation qui tend à s'étendre de plus en plus avec l'arrivée de systèmes de plus en plus compliqués et multi-usages. De part sa philosophie, elle injecte le concept d'Objet. Mais cela est à relativiser pour le cas du langage C. La POO offerte n'est pas aussi pure et rébarbative que sur les langages Effel, Smalltalk ou Simula, mais plutôt un ersatz, un mariage, une harmonisation entre deux visions.

    La POO trouve sa justification dans le fait que les systèmes deviennent de plus en plus pointus car doivent être multi-usages (cas de Window$ où il est possible de regarder une vidéo, d'écouter un CD...). La POO permet une protection du programme qui s'exécute et des données qui lui sont rattachées. Par le système d'encapsulation, les données ne peuvent être altérées, accessibles que dans des cas bien précis. Cette technique apporte une protection générale du programme.

    Le second apport de la POO est la mise à disposition de l'utilisateur d'Objets. Un Objet n'est rien d'autre qu'une grosse structure regroupant en son sein des fonctions et des données. Mais ces structures (appelées aussi Classes) contrairement aux structures d'un C classique, sont soumises au phénomène d'encapsulation (seules les fonctions faisant partie de cette structure peuvent agir sur ces données et inversement). Ces Objets , qui ne se justifient pas lorsque l'on travail sous DOS où toutes les ressources systèmes sont à votre botte, se révéleront très appréciables lorsque l'on voudra rédiger un programme tournant sur des plates-formes multi-tâches sans risque de conflits (sur Window$ notamment).

    L'exemple le plus typique est sans doute la fenêtre classique Window$. S'il n'existait pas d'Objet "fenêtre", l'utilisateur serait dans l'obligation de concevoir lui-même cette fenêtre. Avec ce système, le C++ offre au programmeur la possibilité d'utiliser l'Objet pré-défini "fenêtre" par le système d'héritage et, le cas échéant, de modifier certaines des fonctions rattachées à cet Objet par le système de dérivation. On se crée, à partir d'un Objet standard pré-défini, son Objet à la carte (la fenêtre doit-elle être redimensionnable ? Combien de couleurs ? Peut-on la fermer, la bouger ? Quand doit-on la réafficher ? Etc...).

    Pour terminer sur ce thème, je tiens à couper court à une idée reçue. Dire qu'il vaut mieux apprendre à programmer le C++ plutôt que le C est une pure connerie. Le C++ n'est qu'un ajout, un sur-ensemble au C standard des possibilités de la POO. Sans connaissances approfondies du C standard, la compréhension du C++ et la rédaction d'un listing n'est pas possible. Une bonne connaissance du C standard est impérative pour comprendre le concept ardu et parfois déroutant de la POO. Sachez qu'il est tout à fait possible d'écrire un programme Window$ sans utiliser une seule possibilité du C++. Le C++ est une possibilité offerte pour doter le programme d'une plus grande fiabilité, mais nullement une voie incontournable.
 
 
 
 
Avantages
  • S'il ne fallait qu'en (ap)prendre un, pourquoi pas celui qui est le plus utilisé (à juste titre !). 
  • Vitesse d'exécution se rapprochant de l'Assembleur. 
  • Portage aisé sur d'autres systèmes. 
  • Grande lisibilité grâce à la hiérarchisation du listing. 
  • Possibilité d'inclure des modules Assembleurs. 
  • Magouiller tous les aspects du PC. 
  • Rapidité de la rédaction du programme.
Inconvénients
  • Je n'en vois pas. 
Quelques compilateur C
  • BORLAND C/C++ : compilateur de très grande qualité tant au point du code fourni que des possibilités de l'éditeur (aide en ligne, affectation de couleurs différentes pour le mot clé, les variables, les commentaires, etc...qui aident grandement à la lisibilité du listing). Malheureusement, il ne compile qu'en mode réel (snif...).
  • QUICK C : le compilateur de Micro$oft, non testé. Mais si l'on compare les produits Micro$oft avec ceux de ses homologues, on peut dire sans risque de se tromper, qu'il est inférieur à eux. 
  • WATCOM C : ce compilateur a la magnifique particularité de produire très facilement un code en mode protégé. Ce procédé permet d'utiliser la totalité de la mémoire du PC de manière linéaire sans se prendre la tête avec les barrières de la segmentation. Les autres qui produisent un code en mode réel (seul le premier méga est accessible facilement, il faut magouiller pour les autres mégas) peuvent contourner ce problème avec certains logiciels (DJGPP par exemple) ou certaines techniques. 
  • ZORTECH : non testé. 
  • SPHINX C : signalons enfin un compilateur particulier. Il a réussi, en son sein, la synthèse du langage C et de l'Assembleur. Il est très puissant, produit un code très petit mais le listing n'étant pas purement du C, le portage est donc presque nul.
 
 
 
 
2.4. Le Pascal
    Je ne vais pas m'éterniser sur ce langage là car je n'en ai pas beaucoup fait. On peut toutefois constater qu'il a quelques points de similitude avec le C (une certaine ouverture, hiérarchisation du listing, etc...) mais sans toutefois être aussi aboutis. Ce qui le caractérise, c'est sa simplicité. D'ailleurs bon nombre de programmeurs ont commencé sur ce langage. On peut le situer entre un Basic et un C.

    Sa popularité, sur PC, vient d'abord de la qualité du compilateur développé par la Société Borland. Si l'on ajoute à cela la simplicité de ce langage d'apprentissage (comme le Basic), toutes les conditions étaient réunies pour que les ex-débutants continuent sur ce langage. A tel point qu'aujourd'hui, les sources d'exemples disponibles à tout un chacun sont innombrables, sans doute les plus fournies de tous les langages.

    Un grand nombre de clubs informatiques et autres écoles supérieures (BTS, etc...) continuent d'enseigner ce langage (c'est dur de reformer un prof borné et soucieux d'en foutre le moins possible). L'effet boule de neige s'accentue.

    Signalons encore au crédit du compilateur de Borland (uniquement sur PC) la possibilité de générer un code exécutable en mode protégé (donne accès à toute la mémoire du PC). Tous les compilateurs C ne supportent pas d'origine cet avantage mais après une petite magouille.

    L'inconvénient principal du Pascal est sa non évolution. Ainsi l'on trouve encore la différenciation entre Procédure et Fonction (l'un renvoie une valeur retour et l'autre non) alors que le C a depuis longtemps résolu ce problème. Il souffre cruellement d'un manque de mise à jour flagrant (contrairement au C avec le comité de normalisation). C'est bien pour cela que les programmeurs Pascal passent assez vite au C après s'être familiarisés avec les diverses logiques de programmation.
 
 
Avantages
  • Vitesse d'exécution se rapprochant du C. 
  • Petite taille de l'exécutable. 
  • Portage possible sur d'autres systèmes. 
  • Grande lisibilité grâce à la hiérarchisation du listing. 
  • Possibilité d'inclure des modules Assembleurs. 
  • Sécurité. 
  • Rapidité de la rédaction du programme.
Inconvénients
  • Stagnation et non évolution, donc archaïsme (un peu comme la chrétienté au Moyen-Age lorsqu'elle a persécuté Copernic).
Quelques Pascal
  • BORLAND TURBO PASCAL : compilateur de très grande qualité tant au point du code fourni que des possibilités de l'éditeur (aide en ligne, affectation de couleurs différentes pour les mots clés, les variables, les commentaires, etc...qui aide grandement à la lisibilité du listing). Signalons enfin que la version 7.0 permet de produire un code en mode protégé. 
  • PKL PASCAL : compilateur shareware compatible avec le BORLAND TURBO PASCAL. Il a un éditeur, debugger...La totale quoi !!!
 
 
 
 
2.5. Conclusion
    Commencer dans le monde de la programmation n'est pas simple et le choix d'un langage pour une première approche est primordial. Je puis vous assurer que commencer directement en Assembleur alors que l'on ne possède que des bribes de raisonnements logiques propres à la philosophie de la machine est le plus sûr moyen d'en être définitivement dégoûté. Ce serait dommage de devenir un passif passant son temps à jouer à un ersatz de Doom (ou de Warcraft, n'est-ce pas Captain'Conspi ?).

    Les échelons doivent être gravis un par un. Les sauter ne ferait qu'allonger l'apprentissage des notions les plus essentielles ou même les occulter pour finir par ne plus rien comprendre (dans ce cas là, restez plutôt au lit). Un Basic, même pourri, vous permettra d'appréhender ces logiques. Il faut impérativement en comprendre toutes les articulations : qu'est une variable, une boucle, un saut, un test de condition ? Non, vous ne perdrez pas votre temps. Il faut savoir qu'une boucle qu'elle soit en Basic, C ou Pascal relève toujours de la même démarche et conduira toujours au même résultat. Une fois comprise, seule la syntaxe change ainsi que quelques apports qui n'en seront que plus facilement assimilables.

    Lorsque l'idée lumineuse d'inclure des modules assembleurs dans vos listings, qu'ils soient en Basic, Pascal ou C, vous aura traversé la cervelle, optez pour un compilateur Assembleur de la même marque que le langage de haut niveau utilisé.

    Il est impératif de posséder un livre se rapportant au langage étudié. Il est important de comprendre tout ce que l'on fait. Les toutes petites lacunes accumulées aujourd'hui seront les énormes problèmes de demain (elle est nulle cette tournure de phrase ! Dire que mes parents voulaient que je sois prof ! Non ? Si !!!).

    Je terminerai par quelques conseils d'usage.
    Veillez tout d'abord à rédiger vos listings proprement. Nommez vos variables d'une manière compréhensible, espacez les fonctions, n'en mettez qu'une par ligne. Mettez des commentaires en face des instructions. Ne faites pas :

  • int a[10],z;
  • for (z=0;z<10;z++){a[i]=i;}
  •     mais,
  • int table [ 10 ], Cpt;
  • for ( Cpt = 0; Cpt < 10; Cpt++ )
  •     {
  •     table [ Cpt ] = Cpt;
  •     }
  •     Les commentaires sont très importants. Il est presque sûr que si vous vous repenchez sur un de vos listings rédigé quelques mois plus tard vous ne le comprendrez qu'après une intense débauche de concentration.

        Dernier conseil : programmez en C.

     
     
     

     
     
    3. Les cas Visual Xxx
        L'arrivée de Window$ sur le PC a bouleversé le monde de la programmation. Les initiatives des Visuals répondent à une demande sans cesse croissante des utilisateurs désireux de développer des logiciels sur cette plate-forme. Ainsi on vit apparaître d'anciens langages spécialement modifiés pour l'occasion : Basic (Visual Basic), C (Visual C de Micro$oft et Borland C/C++ 3.x), Pascal (Win-Pascal et Delphi).

        Ces nouveaux types de langages, que l'on qualifie pompeusement souvent de nouvelle génération n, ne sont donc en fait que des langages classiques sur lesquels on aurait greffé des possibilités permettant de supporter les innovations offertes par Window$. Ainsi, il est aisé de créer une fenêtre, d'afficher des dessins, de faire de cadre...

        Il y a tout de même d'énormes points noirs à ce type de programmation.

        Tout d'abord la taille des fichiers exécutables produits. Elle est excésivement énorme (1 méga-octet est bien souvent le revers de la médaille). Pourquoi ? Il faut bien que le programme stocke quelque part en son sein les définitions, les structure pour être compatible avec Window$. Avec cette technique, le programme est autonome. Bien souvent le langage vous permet de ne pas injecter les définitions dans le programme exécutable mais il faut alors veiller à ce que certains *.DLL(s) utilisés (par exemple VBRUN600.DLL pour VISUAL BASIC) soient installés sur le disque dur. Ce système permet de partager ces *.DLL(s) avec tous les programmes rédigés avec cette technique. D'où un gain de taille des fichiers très appréciable. Dans ce cas, le programme n'est pas autonome mais tributaire de certains fichiers (appelés aussi " librairies ").

        Secundo, la lenteur de la vitesse de l'exécution. Le programme tournant sur la plate-forme Window$, qui est (théoriquement) multi-tâches, se voit imposer un partage des temps et des accès au BUS contrairement au DOS où l'on s'accappare (presque) toutes les ressources du système.

        Apprendre à créer des fenêtres, des boîtes de dialogues sous Window$ sans maîtriser les logiques de programmations de bases (boucles, tests, sauts, variables...) est une erreur. On aboutirait à une demi-compréhension de la manoeuvre. Un simple message d'erreur s'avérera alors n'être que de l'Hébreux. C'est l'une des causes de dégoût de la programmation parmi ceux qui débutent.
     

     

    Messire Hobocn